Tailwind CSS peer variant์ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ ๋ค๋ฅธ ์๋ฆฌ๋จผํธ์ ์ํ์ ๋ฐ๋ผ ํ์ ์๋ฆฌ๋จผํธ์ ์คํ์ผ์ ์ง์ ํ์ธ์. ์ด ์ข ํฉ ๊ฐ์ด๋๋ ๋์ ์ด๊ณ ๋ฐ์ํ์ธ UI๋ฅผ ๋ง๋ค๊ธฐ ์ํ ์ฌ์ธต์ ์ธ ์์ ์ ์ค์ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ์ ๊ณตํฉ๋๋ค.
Tailwind CSS Peer Variant: ํ์ ์๋ฆฌ๋จผํธ ์คํ์ผ๋ง ๋ง์คํฐํ๊ธฐ
Tailwind CSS๋ ์คํ์ผ๋ง ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ํํ๋ ์ ํธ๋ฆฌํฐ ์ฐ์ ์ ๊ทผ ๋ฐฉ์์ ์ ๊ณตํ์ฌ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์ ํ๋ช ์ ์ผ์ผ์ผฐ์ต๋๋ค. Tailwind์ ํต์ฌ ๊ธฐ๋ฅ๋ ๊ฐ๋ ฅํ์ง๋ง, peer variant๋ ํ์ ์๋ฆฌ๋จผํธ์ ์ํ์ ๊ธฐ๋ฐํ์ฌ ์๋ฆฌ๋จผํธ ์คํ์ผ๋ง์ ๊ณ ๊ธ ์์ค์ผ๋ก ์ ์ดํ ์ ์๊ฒ ํด์ค๋๋ค. ์ด ๊ฐ์ด๋์์๋ peer variant์ ๋ณต์กํ ๋ด์ฉ์ ๊น์ด ํ๊ณ ๋ค์ด, ๋์ ์ด๊ณ ์ธํฐ๋ํฐ๋ธํ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค.
Peer Variant ์ดํดํ๊ธฐ
Peer variant๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ ์๋ฆฌ๋จผํธ์ ์ํ(์: hover, focus, checked)์ ๋ฐ๋ผ ์๋ฆฌ๋จผํธ์ ์คํ์ผ์ ์ง์ ํ ์ ์์ต๋๋ค. ์ด๋ Tailwind์ peer
ํด๋์ค๋ฅผ peer-hover
, peer-focus
, peer-checked
์ ๊ฐ์ ๋ค๋ฅธ ์ํ ๊ธฐ๋ฐ variant์ ํจ๊ป ์ฌ์ฉํ์ฌ ๊ตฌํ๋ฉ๋๋ค. ์ด variant๋ค์ CSS ํ์ ๊ฒฐํฉ์๋ฅผ ํ์ฉํ์ฌ ๊ด๋ จ๋ ์๋ฆฌ๋จผํธ๋ฅผ ํ๊ฒํ
ํ๊ณ ์คํ์ผ์ ์ ์ฉํฉ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก peer
ํด๋์ค๋ ๋ง์ปค ์ญํ ์ ํ์ฌ, ์ดํ์ peer ๊ธฐ๋ฐ variant๋ค์ด DOM ํธ๋ฆฌ์์ ๋งํฌ๋ ์๋ฆฌ๋จผํธ๋ฅผ ๋ฐ๋ฅด๋ ํ์ ์๋ฆฌ๋จผํธ๋ค์ ํ๊ฒํ
ํ ์ ์๋๋ก ํฉ๋๋ค.
ํต์ฌ ๊ฐ๋
peer
ํด๋์ค: ์ด ํด๋์ค๋ ์์ ์ ์ํ ๋ณํ๊ฐ ํ์ ์๋ฆฌ๋จผํธ์ ์คํ์ผ ๋ณ๊ฒฝ์ ์ ๋ฐํ ์๋ฆฌ๋จผํธ์ ์ ์ฉ๋์ด์ผ ํฉ๋๋ค.peer-*
Variant: ์ด variant๋ค(์:peer-hover
,peer-focus
,peer-checked
)์ peer ์๋ฆฌ๋จผํธ๊ฐ ์ง์ ๋ ์ํ์ ์์ ๋ ์คํ์ผ์ ์ ์ฉํ๊ณ ์ ํ๋ ์๋ฆฌ๋จผํธ์ ์ ์ฉ๋ฉ๋๋ค.- ํ์ ๊ฒฐํฉ์: Tailwind CSS๋ ์๋ฆฌ๋จผํธ๋ฅผ ํ๊ฒํ
ํ๊ธฐ ์ํด ํ์ ๊ฒฐํฉ์(ํนํ ์ธ์ ํ์ ์ ํ์
+
์ ์ผ๋ฐ ํ์ ์ ํ์~
)๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๊ธฐ๋ณธ ๊ตฌ๋ฌธ ๋ฐ ์ฌ์ฉ๋ฒ
peer variant๋ฅผ ์ฌ์ฉํ๋ ๊ธฐ๋ณธ ๊ตฌ๋ฌธ์ ํธ๋ฆฌ๊ฑฐ ์๋ฆฌ๋จผํธ์ peer
ํด๋์ค๋ฅผ ์ ์ฉํ ๋ค์, ํ๊ฒ ์๋ฆฌ๋จผํธ์ peer-*
variant๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค.
์์ : ์ฒดํฌ๋ฐ์ค๊ฐ ์ ํ๋์์ ๋ ๋จ๋ฝ ์คํ์ผ๋งํ๊ธฐ
<label class="flex items-center space-x-2">
<input type="checkbox" class="peer" />
<span>๋คํฌ ๋ชจ๋ ํ์ฑํ</span>
</label>
<p class="hidden peer-checked:block text-gray-700">
๋คํฌ ๋ชจ๋๊ฐ ํ์ฑํ๋์์ต๋๋ค.
</p>
์ด ์์ ์์ peer
ํด๋์ค๋ <input type="checkbox"/>
์๋ฆฌ๋จผํธ์ ์ ์ฉ๋์์ต๋๋ค. ์ฒดํฌ๋ฐ์ค์ ํ์ ์๋ฆฌ๋จผํธ์ธ ๋จ๋ฝ ์๋ฆฌ๋จผํธ์๋ peer-checked:block
ํด๋์ค๊ฐ ์์ต๋๋ค. ์ด๋ ์ฒดํฌ๋ฐ์ค๊ฐ ์ ํ๋ ๋, ๋จ๋ฝ์ display ์์ฑ์ด hidden
์์ block
์ผ๋ก ๋ณ๊ฒฝ๋จ์ ์๋ฏธํฉ๋๋ค.
์ค์ฉ์ ์ธ ์์ ๋ฐ ์ฌ์ฉ ์ฌ๋ก
Peer variant๋ ๋์ ์ด๊ณ ์ธํฐ๋ํฐ๋ธํ UI ์ปดํฌ๋ํธ๋ฅผ ๋ง๋๋ ๋ค์ํ ๊ฐ๋ฅ์ฑ์ ์ด์ด์ค๋๋ค. ๋ค์์ ๊ทธ ๋ค์์ฑ์ ๋ณด์ฌ์ฃผ๋ ๋ช ๊ฐ์ง ์ค์ฉ์ ์ธ ์์ ์ ๋๋ค:
1. ์ธํฐ๋ํฐ๋ธ ํผ ๋ ์ด๋ธ
ํด๋น ์ ๋ ฅ ํ๋์ ํฌ์ปค์ค๊ฐ ๋ง์ถฐ์ก์ ๋ ํผ ๋ ์ด๋ธ์ ์๊ฐ์ ์ผ๋ก ๊ฐ์กฐํ์ฌ ์ฌ์ฉ์ ๊ฒฝํ์ ํฅ์์ํค์ธ์.
<div>
<label for="name" class="block text-gray-700 font-bold mb-2 peer-focus:text-blue-500 transition-colors duration-200">
์ด๋ฆ:
</label>
<input type="text" id="name" class="shadow appearance-none border rounded w-full py-2 px-3 text-gray-700 leading-tight focus:outline-none focus:shadow-outline peer" />
</div>
์ด ์์ ์์ peer
ํด๋์ค๋ ์
๋ ฅ ํ๋์ ์ ์ฉ๋์์ต๋๋ค. ์
๋ ฅ ํ๋์ ํฌ์ปค์ค๊ฐ ๋ง์ถฐ์ง๋ฉด, ๋ ์ด๋ธ์ peer-focus:text-blue-500
ํด๋์ค๊ฐ ๋ ์ด๋ธ์ ํ
์คํธ ์์์ ํ๋์์ผ๋ก ๋ณ๊ฒฝํ์ฌ ์ฌ์ฉ์์๊ฒ ์๊ฐ์ ์ ํธ๋ฅผ ์ ๊ณตํฉ๋๋ค.
2. ์์ฝ๋์ธ/์ ์ด์ ์น์
ํค๋๋ฅผ ํด๋ฆญํ๋ฉด ์๋ ์ฝํ ์ธ ๊ฐ ํ์ฅ๋๊ฑฐ๋ ์ถ์๋๋ ์์ฝ๋์ธ ์น์ ์ ๋ง๋์ธ์.
<div>
<button class="w-full text-left py-2 px-4 bg-gray-100 hover:bg-gray-200 focus:outline-none peer">
์น์
์ ๋ชฉ
</button>
<div class="hidden peer-focus:block bg-white py-2 px-4">
<p>์น์
์ ๋ด์ฉ์
๋๋ค.</p>
</div>
</div>
์ฌ๊ธฐ์ peer
ํด๋์ค๋ ๋ฒํผ์ ์ ์ฉ๋ฉ๋๋ค. ์ฝํ
์ธ div๋ hidden peer-focus:block
ํด๋์ค๋ฅผ ๊ฐ์ง๋๋ค. ์ด ์์ ๋ 'focus' ์ํ๋ฅผ ํ์ฉํ์ง๋ง, ์ค์ ์์ฝ๋์ธ ๊ตฌํ์์๋ ์ ๊ทผ์ฑ ๋ฐ ํฅ์๋ ๊ธฐ๋ฅ์ ์ํด ์ ์ ํ ARIA ์์ฑ(์: `aria-expanded`)๊ณผ JavaScript๊ฐ ํ์ํ ์ ์๋ค๋ ์ ์ ์ ์ํด์ผ ํฉ๋๋ค. ํค๋ณด๋ ๋ค๋น๊ฒ์ด์
๊ณผ ์คํฌ๋ฆฐ ๋ฆฌ๋ ํธํ์ฑ์ ๊ณ ๋ คํ์ธ์.
3. ๋์ ๋ชฉ๋ก ์คํ์ผ๋ง
peer variant๋ฅผ ์ฌ์ฉํ์ฌ hover ๋๋ focus ์ ๋ชฉ๋ก ํญ๋ชฉ์ ๊ฐ์กฐํ์ธ์.
<ul>
<li>
<a href="#" class="block py-2 px-4 hover:bg-gray-100 focus:outline-none peer">ํญ๋ชฉ 1</a>
<span class="hidden peer-hover:inline peer-focus:inline text-gray-500 ml-2">(์์ธ ์ ๋ณด)</span>
</li>
<li>
<a href="#" class="block py-2 px-4 hover:bg-gray-100 focus:outline-none peer">ํญ๋ชฉ 2</a>
<span class="hidden peer-hover:inline peer-focus:inline text-gray-500 ml-2">(์์ธ ์ ๋ณด)</span>
</li>
</ul>
์ด ๊ฒฝ์ฐ, peer
ํด๋์ค๋ ๊ฐ ๋ชฉ๋ก ํญ๋ชฉ ๋ด์ ์ต์ปค ํ๊ทธ์ ์ ์ฉ๋ฉ๋๋ค. ์ต์ปค ํ๊ทธ์ hoverํ๊ฑฐ๋ focusํ๋ฉด ์ธ์ ํ span ์๋ฆฌ๋จผํธ๊ฐ ํ์๋์ด ์ถ๊ฐ์ ์ธ ์์ธ ์ ๋ณด๋ฅผ ์ ๊ณตํฉ๋๋ค.
4. ์ ๋ ฅ ์ ํจ์ฑ์ ๊ธฐ๋ฐํ ์คํ์ผ๋ง
ํผ ํ๋ ์ ๋ ฅ์ ์ ํจ์ฑ์ ๋ฐ๋ผ ์ฌ์ฉ์์๊ฒ ์๊ฐ์ ํผ๋๋ฐฑ์ ์ ๊ณตํ์ธ์.
<div>
<label for="email" class="block text-gray-700 font-bold mb-2">์ด๋ฉ์ผ:</label>
<input type="email" id="email" required class="shadow appearance-none border rounded w-full py-2 px-3 text-gray-700 leading-tight focus:outline-none focus:shadow-outline peer" />
<p class="hidden peer-invalid:block text-red-500 text-sm mt-1">์ ํจํ ์ด๋ฉ์ผ ์ฃผ์๋ฅผ ์
๋ ฅํด์ฃผ์ธ์.</p>
</div>
์ฌ๊ธฐ์๋ ๋ธ๋ผ์ฐ์ ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ํ๋ :invalid
์์ฌ ํด๋์ค์ peer-invalid
variant๋ฅผ ํ์ฉํฉ๋๋ค. ์ด๋ฉ์ผ ์
๋ ฅ์ด ์ ํจํ์ง ์์ผ๋ฉด ์ค๋ฅ ๋ฉ์์ง๊ฐ ํ์๋ฉ๋๋ค.
5. ์ปค์คํ ๋ผ๋์ค ๋ฒํผ ๋ฐ ์ฒดํฌ๋ฐ์ค
peer variant๋ฅผ ์ฌ์ฉํ์ฌ ์ปค์คํ ์ธ๋์ผ์ดํฐ ์คํ์ผ์ ์ง์ ํจ์ผ๋ก์จ ์๊ฐ์ ์ผ๋ก ๋งค๋ ฅ์ ์ด๊ณ ์ธํฐ๋ํฐ๋ธํ ๋ผ๋์ค ๋ฒํผ๊ณผ ์ฒดํฌ๋ฐ์ค๋ฅผ ๋ง๋์ธ์.
<label class="inline-flex items-center">
<input type="radio" class="form-radio h-5 w-5 text-blue-600 peer" name="radio" value="option1" />
<span class="ml-2 text-gray-700 peer-checked:text-blue-600">์ต์
1</span>
<span class="ml-2 hidden peer-checked:inline-block w-5 h-5 rounded-full bg-blue-600"></span>
</label>
์ด ์์ ์์๋ ๋ผ๋์ค ๋ฒํผ์ด ์ ํ๋์์ ๋ peer-checked
variant๋ฅผ ์ฌ์ฉํ์ฌ ๋ ์ด๋ธ ํ
์คํธ์ ์ปค์คํ
์ธ๋์ผ์ดํฐ(์์์ด ์๋ span) ๋ชจ๋์ ์คํ์ผ์ ์ ์ฉํฉ๋๋ค.
๊ณ ๊ธ ๊ธฐ์ ๋ฐ ๊ณ ๋ ค ์ฌํญ
๋ค๋ฅธ Variant์ Peer Variant ๊ฒฐํฉํ๊ธฐ
peer variant๋ hover
, focus
, active
์ ๊ฐ์ ๋ค๋ฅธ Tailwind variant์ ๊ฒฐํฉํ์ฌ ํจ์ฌ ๋ ๋ณต์กํ๊ณ ๋ฏธ๋ฌํ ์ํธ์์ฉ์ ๋ง๋ค ์ ์์ต๋๋ค.
<button class="peer bg-gray-200 hover:bg-gray-300 focus:outline-none focus:bg-gray-300"
>
์ฌ๊ธฐ์ ๋ง์ฐ์ค๋ฅผ ์ฌ๋ฆฌ์ธ์
</button>
<p class="hidden peer-hover:block peer-focus:block">hover ๋๋ focus ์์ ํ์๋ฉ๋๋ค</p>
์ด ์์ ๋ ๋ฒํผ์ hoverํ๊ฑฐ๋ focusํ ๋ ๋จ๋ฝ์ ํ์ํฉ๋๋ค.
์ผ๋ฐ ํ์ ๊ฒฐํฉ์(~
) ์ฌ์ฉํ๊ธฐ
์ธ์ ํ์ ๊ฒฐํฉ์(+
)๊ฐ ๋ ์ผ๋ฐ์ ์ด์ง๋ง, ์ผ๋ฐ ํ์ ๊ฒฐํฉ์(~
)๋ ํ๊ฒ ์๋ฆฌ๋จผํธ๊ฐ peer ์๋ฆฌ๋จผํธ์ ๋ฐ๋ก ์ธ์ ํด ์์ง ์์ ํน์ ์๋๋ฆฌ์ค์์ ์ ์ฉํ ์ ์์ต๋๋ค.
์์ : ์ฒดํฌ๋ฐ์ค ๋ค์ ์ค๋ ๋ชจ๋ ๋จ๋ฝ ์คํ์ผ๋งํ๊ธฐ.
<input type="checkbox" class="peer" />
<p>๋จ๋ฝ 1</p>
<p class="peer-checked:text-green-500">๋จ๋ฝ 2</p>
<p class="peer-checked:text-green-500">๋จ๋ฝ 3</p>
์ด ์์ ์์๋ ์ฒดํฌ๋ฐ์ค๊ฐ ์ ํ๋๋ฉด ๋ค๋ฐ๋ฅด๋ ๋ชจ๋ ๋จ๋ฝ์ ํ ์คํธ ์์์ด ๋ น์์ผ๋ก ๋ณ๊ฒฝ๋ฉ๋๋ค.
์ ๊ทผ์ฑ ๊ณ ๋ ค ์ฌํญ
peer variant๋ฅผ ์ฌ์ฉํ ๋๋ ์ ๊ทผ์ฑ์ ๊ณ ๋ คํ๋ ๊ฒ์ด ๋งค์ฐ ์ค์ํฉ๋๋ค. ์ฌ๋ฌ๋ถ์ด ๋ง๋๋ ์ํธ์์ฉ์ด ์ฅ์ ๊ฐ ์๋ ์ฌ๋๋ค๋ ์ฌ์ฉํ๊ณ ์ดํดํ ์ ์๋๋ก ํด์ผ ํฉ๋๋ค. ์ฌ๊ธฐ์๋ ๋ค์์ด ํฌํจ๋ฉ๋๋ค:
- ํค๋ณด๋ ๋ค๋น๊ฒ์ด์
: ๋ชจ๋ ์ธํฐ๋ํฐ๋ธ ์๋ฆฌ๋จผํธ๊ฐ ํค๋ณด๋๋ก ์ ๊ทผ ๊ฐ๋ฅํ๋๋ก ํ์ธ์.
focus
์ํ๋ฅผ ์ ์ ํ๊ฒ ์ฌ์ฉํ์ธ์. - ์คํฌ๋ฆฐ ๋ฆฌ๋: ์คํฌ๋ฆฐ ๋ฆฌ๋ ์ฌ์ฉ์์๊ฒ ์๋ฆฌ๋จผํธ์ ์ํ์ ๋ชฉ์ ์ ์ ๋ฌํ๊ธฐ ์ํด ์ ์ ํ ARIA ์์ฑ์ ์ ๊ณตํ์ธ์. ์๋ฅผ ๋ค์ด, ์ ์ด์ ์น์
์๋
aria-expanded
๋ฅผ, ์ปค์คํ ์ฒดํฌ๋ฐ์ค ๋ฐ ๋ผ๋์ค ๋ฒํผ์๋aria-checked
๋ฅผ ์ฌ์ฉํ์ธ์. - ์์ ๋๋น: ํนํ peer variant๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฆฌ๋จผํธ ์ํ์ ๋ฐ๋ผ ์์์ ๋ณ๊ฒฝํ ๋, ํ ์คํธ์ ๋ฐฐ๊ฒฝ์ ๊ฐ์ ์ถฉ๋ถํ ์์ ๋๋น๋ฅผ ํ๋ณดํ์ธ์.
- ๋ช ํํ ์๊ฐ์ ์ ํธ: ์๋ฆฌ๋จผํธ์ ์ํ๋ฅผ ๋ํ๋ด๋ ๋ช ํํ ์๊ฐ์ ์ ํธ๋ฅผ ์ ๊ณตํ์ธ์. ์์ ๋ณ๊ฒฝ์๋ง ์์กดํ์ง ๋ง๊ณ ์์ด์ฝ์ด๋ ์ ๋๋ฉ์ด์ ๊ฐ์ ๋ค๋ฅธ ์๊ฐ์ ํ์๊ธฐ๋ฅผ ์ฌ์ฉํ์ธ์.
์ฑ๋ฅ ๊ณ ๋ ค ์ฌํญ
peer variant๋ ํ์ ์๋ฆฌ๋จผํธ๋ฅผ ์คํ์ผ๋งํ๋ ๊ฐ๋ ฅํ ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ง๋ง, ์ฑ๋ฅ์ ์ ์ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ํนํ ๋ณต์กํ ์คํ์ผ์ด๋ ๋ง์ ์์ ์๋ฆฌ๋จผํธ์ peer variant๋ฅผ ๊ณผ๋ํ๊ฒ ์ฌ์ฉํ๋ฉด ํ์ด์ง ์ฑ๋ฅ์ ์ํฅ์ ์ค ์ ์์ต๋๋ค. ๋ค์ ์ต์ ํ ์ ๋ต์ ๊ณ ๋ คํ์ธ์:
- ๋ฒ์ ์ ํ: peer variant๋ฅผ ์๊ปด์ ํ์ํ ๋๋ง ์ฌ์ฉํ์ธ์. ํ์ด์ง์ ๋์ ์์ญ์ ์ ์ฉํ๋ ๊ฒ์ ํผํ์ธ์.
- ์คํ์ผ ๋จ์ํ: peer variant๋ฅผ ํตํด ์ ์ฉ๋๋ ์คํ์ผ์ ๊ฐ๋ฅํ ํ ๋จ์ํ๊ฒ ์ ์งํ์ธ์. ๋ณต์กํ ์ ๋๋ฉ์ด์ ์ด๋ ํธ๋์ง์ ์ ํผํ์ธ์.
- ๋๋ฐ์ด์ค/์ฐ๋กํ: JavaScript ์ด๋ฒคํธ(์: ์คํฌ๋กค ์ด๋ฒคํธ)์ ํจ๊ป peer variant๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ๊ณผ๋ํ ์คํ์ผ ์ ๋ฐ์ดํธ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ๋๋ฐ์ด์ฑํ๊ฑฐ๋ ์ฐ๋กํ๋งํ๋ ๊ฒ์ ๊ณ ๋ คํ์ธ์.
์ผ๋ฐ์ ์ธ ๋ฌธ์ ํด๊ฒฐ
๋ค์์ peer variant ์์ ์ ๋ง์ฃผ์น ์ ์๋ ๋ช ๊ฐ์ง ์ผ๋ฐ์ ์ธ ๋ฌธ์ ์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋๋ค:
- ์คํ์ผ์ด ์ ์ฉ๋์ง ์์:
peer
ํด๋์ค๊ฐ ์ฌ๋ฐ๋ฅธ ์๋ฆฌ๋จผํธ์ ์ ์ฉ๋์๋์ง ํ์ธํ์ธ์.- ํ๊ฒ ์๋ฆฌ๋จผํธ๊ฐ peer ์๋ฆฌ๋จผํธ์ ํ์ ์ธ์ง ํ์ธํ์ธ์. Peer variant๋ ํ์ ์๋ฆฌ๋จผํธ์์๋ง ์๋ํฉ๋๋ค.
- CSS ๋ช
์์ฑ ๋ฌธ์ ๋ฅผ ํ์ธํ์ธ์. ๋ ๊ตฌ์ฒด์ ์ธ CSS ๊ท์น์ด peer variant ์คํ์ผ์ ๋ฎ์ด์ธ ์ ์์ต๋๋ค. ํ์ํ ๊ฒฝ์ฐ Tailwind์
!important
์์์ด๋ฅผ ์ฌ์ฉํ์ธ์(๋จ, ์๊ปด์ ์ฌ์ฉํด์ผ ํฉ๋๋ค). - ์์ฑ๋ CSS๋ฅผ ๊ฒ์ฌํ์ธ์. ๋ธ๋ผ์ฐ์ ์ ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑ๋ CSS๋ฅผ ๊ฒ์ฌํ๊ณ peer variant ์คํ์ผ์ด ์ฌ๋ฐ๋ฅด๊ฒ ์ ์ฉ๋๊ณ ์๋์ง ํ์ธํ์ธ์.
- ์์์น ๋ชปํ ๋์:
- ์ถฉ๋ํ๋ ์คํ์ผ์ ํ์ธํ์ธ์. peer variant ์คํ์ผ์ ๋ฐฉํดํ๋ ๋ค๋ฅธ CSS ๊ท์น์ด ์๋์ง ํ์ธํ์ธ์.
- DOM ๊ตฌ์กฐ๋ฅผ ํ์ธํ์ธ์. DOM ๊ตฌ์กฐ๊ฐ ์์๋๋ก์ธ์ง ํ์ธํ์ธ์. DOM ๊ตฌ์กฐ์ ๋ณ๊ฒฝ์ peer variant์ ์๋ ๋ฐฉ์์ ์ํฅ์ ์ค ์ ์์ต๋๋ค.
- ๋ค๋ฅธ ๋ธ๋ผ์ฐ์ ์์ ํ ์คํธํ์ธ์. ์ผ๋ถ ๋ธ๋ผ์ฐ์ ๋ CSS๋ฅผ ์ฝ๊ฐ ๋ค๋ฅด๊ฒ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ์ผ๊ด๋ ๋์์ ๋ณด์ฅํ๊ธฐ ์ํด ์ฌ๋ฌ ๋ธ๋ผ์ฐ์ ์์ ์ฝ๋๋ฅผ ํ ์คํธํ์ธ์.
Peer Variant์ ๋์
peer variant๋ ๊ฐ๋ ฅํ ๋๊ตฌ์ด์ง๋ง, ๊ฒฝ์ฐ์ ๋ฐ๋ผ ์ฌ์ฉํ ์ ์๋ ๋์์ ์ธ ์ ๊ทผ ๋ฐฉ์๋ ์์ต๋๋ค. ์ด๋ฌํ ๋์์ ํ๋ก์ ํธ์ ํน์ ์๊ตฌ ์ฌํญ์ ๋ฐ๋ผ ๋ ์ ์ ํ ์ ์์ต๋๋ค.
- JavaScript: JavaScript๋ ๋ณต์กํ ์ํธ์์ฉ์ ๊ธฐ๋ฐํ ์๋ฆฌ๋จผํธ ์คํ์ผ๋ง์ ๊ฐ์ฅ ํฐ ์ ์ฐ์ฑ์ ์ ๊ณตํฉ๋๋ค. JavaScript๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฆฌ๋จผํธ ์ํ์ ๋ฐ๋ผ ํด๋์ค๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ ๊ฑฐํ ์ ์์ต๋๋ค.
- CSS Custom Properties (๋ณ์): CSS custom properties๋ ์๋ฆฌ๋จผํธ ์คํ์ผ๋ง์ ์ฌ์ฉํ ์ ์๋ ๊ฐ์ ์ ์ฅํ๊ณ ์ ๋ฐ์ดํธํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค. ์ด๋ ์ฌ์ฉ์ ์ ํธ๋์ ๋ฐ๋ผ ๋ณ๊ฒฝ๋๋ ๋์ ํ ๋ง๋ ์คํ์ผ์ ๋ง๋๋ ๋ฐ ์ ์ฉํ ์ ์์ต๋๋ค.
- CSS
:has()
์์ฌ ํด๋์ค (๋น๊ต์ ์ต์ , ๋ธ๋ผ์ฐ์ ํธํ์ฑ ํ์ธ ํ์)::has()
์์ฌ ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ฉด ํน์ ์์ ์๋ฆฌ๋จผํธ๋ฅผ ํฌํจํ๋ ์๋ฆฌ๋จผํธ๋ฅผ ์ ํํ ์ ์์ต๋๋ค. peer variant์ ์ง์ ์ ์ธ ๋์ฒด์ฌ๋ ์๋์ง๋ง, ๊ฒฝ์ฐ์ ๋ฐ๋ผ ๋น์ทํ ๊ฒฐ๊ณผ๋ฅผ ์ป๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค. ์ด๊ฒ์ ์ต์ CSS ๊ธฐ๋ฅ์ด๋ฉฐ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ์์ ์ง์๋์ง ์์ ์ ์์ต๋๋ค.
๊ฒฐ๋ก
Tailwind CSS peer variant๋ ๋ค๋ฅธ ์๋ฆฌ๋จผํธ์ ์ํ์ ๋ฐ๋ผ ํ์ ์๋ฆฌ๋จผํธ์ ์คํ์ผ์ ์ง์ ํ๋ ๊ฐ๋ ฅํ๊ณ ์ฐ์ํ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. peer variant๋ฅผ ๋ง์คํฐํ๋ฉด ์ฌ์ฉ์ ๊ฒฝํ์ ํฅ์์ํค๋ ๋์ ์ด๊ณ ์ธํฐ๋ํฐ๋ธํ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. peer variant๋ฅผ ์ฌ์ฉํ ๋๋ ์ ๊ทผ์ฑ๊ณผ ์ฑ๋ฅ์ ๊ณ ๋ คํ๊ณ , ์ ์ ํ ๊ฒฝ์ฐ ๋์์ ์ธ ์ ๊ทผ ๋ฐฉ์์ ํ์ํ๋ ๊ฒ์ ์์ง ๋ง์ธ์. peer variant์ ๋ํ ํ์คํ ์ดํด๋ฅผ ๋ฐํ์ผ๋ก Tailwind CSS ๊ธฐ์ ์ ํ ๋จ๊ณ ๋์ด์ฌ๋ ค ์ง์ ์ผ๋ก ๋ฐ์ด๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค.
์ด ๊ฐ์ด๋๋ ๊ธฐ๋ณธ ๊ตฌ๋ฌธ๋ถํฐ ๊ณ ๊ธ ๊ธฐ์ ๋ฐ ๊ณ ๋ ค ์ฌํญ์ ์ด๋ฅด๊ธฐ๊น์ง peer variant์ ๋ํ ํฌ๊ด์ ์ธ ๊ฐ์๋ฅผ ์ ๊ณตํ์ต๋๋ค. ์ ๊ณต๋ ์์ ๋ก ์คํํด๋ณด๊ณ peer variant๊ฐ ์ ๊ณตํ๋ ๋ง์ ๊ฐ๋ฅ์ฑ์ ํ์ํด ๋ณด์ธ์. ์ฆ๊ฑฐ์ด ์คํ์ผ๋ง ๋์ธ์!